export {
	socket
}

var socket = {

	socketTask: null,
	status: null, // websocket是否关闭
	lockReconnect: false, //避免重复连接

	//心跳检测
	timeout: 60, //多少秒执行检测
	timeoutObj: null, //检测服务器端是否还活着
	reconnectTimeOutObj: null, //重连之后多久再次重连

	startWebSocket(url) {
		try {
			return socket.initRequest(url)
		} catch (e) {
			console.log('catch');
			socket.reconnect();
		}
	},


	initRequest(url) {
		socket.socketTask = uni.connectSocket({
			url: url, //接口地址。
			success: () => {
				console.log('连接成功');
			}
		})

		socket.socketTask.onOpen(res => {
			console.log('连接打开');
			// 清除重连定时器
			//clearTimeout(socket.reconnectTimeOutObj)
			// 开启检测
			// socket.start()

		})

		// 如果希望websocket连接一直保持，在close或者error上绑定重新连接方法。
		socket.socketTask.onClose((res) => {
			console.log('连接关闭');
			socket.reconnect();
		})

		socket.socketTask.onError((res) => {
			console.log(res, '连接错误');
			socket.reconnect();
		})

		socket.socketTask.onMessage(res => {
			//接受任何消息都说明当前连接是正常的
			// socket.reset();
			console.log(JSON.parse(res.data))
			//群聊
			if (JSON.parse(res.data).teamId != null) {
				if (JSON.parse(res.data).enterpriseId == 0 && uni.getStorageSync("enterprise")
					.enterpriseId == 0) {
					console.log(111)
					uni.request({
						url: getApp().url + 'team/getTeam',
						data: {
							teamId: JSON.parse(res.data).teamId
						},
						header: {
							token: uni.getStorageSync("token")
						},
						method: "GET",
						success: (resp) => {
							console.log(JSON.parse(res.data))
							if (JSON.parse(res.data).type == 1) {
								uni.createPushMessage({
									content: "[图片]",
									title: resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).teamId,
										team: true
									}
								})
							} else {
								uni.createPushMessage({
									content: JSON.parse(res.data).content,
									title: resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).teamId,
										team: true
									}
								})
							}
						},
						fail: (error) => {
							console.log(error);
						}
					})
				} else if (JSON.parse(res.data).enterpriseId == uni.getStorageSync("enterprise")
					.enterpriseId) {
					uni.request({
						url: getApp().url + 'team/getTeam',
						data: {
							teamId: JSON.parse(res.data).teamId
						},
						header: {
							token: uni.getStorageSync("token")
						},
						method: "GET",
						success: (resp) => {
							console.log(JSON.parse(res.data))
							if (JSON.parse(res.data).type == 1) {
								uni.createPushMessage({
									content: "[图片]",
									title: resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).teamId,
										team: true
									}
								})
							} else {
								uni.createPushMessage({
									content: JSON.parse(res.data).content,
									title: resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).teamId,
										team: true
									}
								})
							}
						},
						fail: (error) => {
							console.log(error);
						}
					})
				}
				// 私聊
			} else {
				if (JSON.parse(res.data).enterpriseId == 0 && uni.getStorageSync("enterprise")
					.enterpriseId == 0) {
					console.log(JSON.parse(res.data).type)
					if (JSON.parse(res.data).type == 5) {
						uni.createPushMessage({
							content: "好友已将您删除",
							title: JSON.parse(res.data).content,
							when: JSON.parse(res.data).createTime
						})
					} else {
						uni.request({
							url: getApp().url + 'friendList/getFriendNotes',
							data: {
								userId: uni.getStorageSync("userId"),
								friendId: JSON.parse(res.data).fromUserId
							},
							header: {
								token: uni.getStorageSync("token")
							},
							method: "GET",
							success: (resp) => {
								console.log(JSON.parse(res.data))
								if (JSON.parse(res.data).type == 1) {
									uni.createPushMessage({
										content: "[图片]",
										title: resp.data.data,
										when: JSON.parse(res.data).createTime,
										payload: {
											id: JSON.parse(res.data).fromUserId,
											channelId: JSON.parse(res.data).content
										}
									})
								} else if (JSON.parse(res.data).type == 2) {
									uni.createPushMessage({
										content: "点击接听视频来电",
										title: resp.data.data,
										when: JSON.parse(res.data).createTime,
										payload: {
											id: JSON.parse(res.data).fromUserId,
											channelId: JSON.parse(res.data).content
										}
									});
									console.log(JSON.parse(res.data).content)
									uni.setStorageSync("roomId", JSON.parse(res.data).content);
								} else if (JSON.parse(res.data).type == 3) {
									uni.createPushMessage({
										content: JSON.parse(JSON.parse(res.data)
											.content).content,
										title: JSON.parse(JSON.parse(res.data).content)
											.name + "请求加您为好友",
										when: JSON.parse(res.data).createTime
									})
								} else if (JSON.parse(res.data).type == 5) {

								} else if (JSON.parse(res.data).type == 6) {
									uni.createPushMessage({
										content: "点击接听语音来电",
										title: resp.data.data,
										when: JSON.parse(res.data).createTime,
										payload: {
											id: JSON.parse(res.data).fromUserId,
											channelId: JSON.parse(res.data).content
										}
									});
									console.log(JSON.parse(res.data).content)
									uni.setStorageSync("roomId", JSON.parse(res.data).content);
								} else if (JSON.parse(res.data).type == 7) {
									console.log(111111111111)
									uni.setStorageSync("roomId", 0);
								} else {
									uni.createPushMessage({
										content: JSON.parse(res.data).content,
										title: resp.data.data,
										when: JSON.parse(res.data).createTime,
										payload: {
											id: JSON.parse(res.data).fromUserId
										}
									})
								}
							},
							fail: (error) => {
								console.log(error);
							}
						})
					}

				} else if (JSON.parse(res.data).enterpriseId == uni.getStorageSync("enterprise")
					.enterpriseId) {
					uni.request({
						url: getApp().url + 'staff/getStaff',
						data: {
							enterpriseId: uni.getStorageSync("enterprise").enterpriseId,
							userId: JSON.parse(res.data).fromUserId
						},
						header: {
							token: uni.getStorageSync("token")
						},
						method: "GET",
						success: (resp) => {
							console.log(JSON.parse(res.data))
							if (JSON.parse(res.data).type == 1) {
								uni.createPushMessage({
									content: "[图片]",
									title: resp.data.data.groupName + resp.data.data
										.position + "-" + resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).fromUserId,
										channelId: JSON.parse(res.data).content,
									}
								})
							} else if (JSON.parse(res.data).type == 2) {
								uni.createPushMessage({
									content: "点击接听视频来电",
									title: resp.data.data.groupName + resp.data.data
										.position + "-" + resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).fromUserId,
										channelId: JSON.parse(res.data).content
									}
								})
								console.log(JSON.parse(res.data).content)
								uni.setStorageSync("roomId", JSON.parse(res.data).content);
							} else if (JSON.parse(res.data).type == 6) {
								uni.createPushMessage({
									content: "点击接听语音来电",
									title: resp.data.data.groupName + resp.data.data
										.position + "-" + resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).fromUserId,
										channelId: JSON.parse(res.data).content
									}
								})
								console.log(JSON.parse(res.data).content)
								uni.setStorageSync("roomId", JSON.parse(res.data).content);
							} else if (JSON.parse(res.data).type == 7) {
								uni.setStorageSync("roomId", 0);
							} else {
								uni.createPushMessage({
									content: JSON.parse(res.data).content,
									title: resp.data.data.groupName + resp.data.data
										.position + "-" + resp.data.data.name,
									when: JSON.parse(res.data).createTime,
									payload: {
										id: JSON.parse(res.data).fromUserId
									}
								})
							}
						},
						fail: (error) => {
							console.log(error);
						}
					})
				}
			}



			console.log(JSON.parse(res.data));
			setTimeout(() => {
				uni.$emit('update', {
				msg: res.data
			})
			}, 500)
			
		})

	},

	send(value) {

		socket.socketTask.send({
			data: value
		})

	},

	// reset和start方法主要用来控制心跳的定时。
	// reset() {
	// 	// 清除定时器重新发送一个心跳信息
	// 	clearTimeout(socket.timeoutObj);
	// 	socket.start();
	// },
	// start() {
	// 	socket.timeoutObj = setTimeout(() => {
	// 		//这里发送一个心跳，后端收到后，返回一个心跳消息，
	// 		//onmessage拿到返回的心跳就说明连接正常
	// 		console.log('ping');
	// 		socket.socketTask.send({
	// 			data: "ping"
	// 		});

	// 	}, socket.timeout)
	// },

	// 重连
	reconnect() {
		// 防止多个方法调用，多处重连
		if (socket.lockReconnect) {
			return;
		};
		socket.lockReconnect = true;
		console.log('准备重连');

		//没连接上会一直重连，设置延迟避免请求过多
		socket.reconnectTimeOutObj = setTimeout(() => {
			// 重新连接
			socket.initRequest(getApp().wurl + uni.getStorageSync("userId") + '/' + uni
				.getStorageSync("token"))
			console.log("连接中.....")

			socket.lockReconnect = false;
		}, 4000);
	},

	// 手动关闭
	close() {
		socket.socketTask.close()
	}
}